package br.com.dallasmotopecas.venda.agenda.controller;

import java.sql.Connection;
import java.util.List;

import javax.faces.context.ExternalContext;

import br.com.dallasmotopecas.comum.agenda.controller.AgendaClienteAtendimentoController;
import br.com.dallasmotopecas.comum.agenda.controller.AgendaClienteController;
import br.com.dallasmotopecas.comum.agenda.controller.AgendaClienteReagendamentoController;
import br.com.dallasmotopecas.comum.agenda.controller.AgendaController;
import br.com.dallasmotopecas.comum.agenda.vo.AgendaClienteAtendimentoVo;
import br.com.dallasmotopecas.comum.agenda.vo.AgendaClienteReagendamentoVo;
import br.com.dallasmotopecas.comum.agenda.vo.AgendaClienteVo;
import br.com.dallasmotopecas.comum.agenda.vo.AgendaVo;
import br.com.dallasmotopecas.util.controller.AbstractController;
import br.com.dallasmotopecas.util.exception.ClasseNaoEncontradaException;
import br.com.dallasmotopecas.util.exception.ConexaoException;
import br.com.dallasmotopecas.util.exception.ListarObjetoException;

public class ManagerListarAgendaController extends AbstractController
{
	public ManagerListarAgendaController(Connection connection) throws ConexaoException
	{
		super(connection);
	}

	public ManagerListarAgendaController(ExternalContext externalContext) throws ClasseNaoEncontradaException, ConexaoException
	{
		super(externalContext);
	}
	
	public void listarAgendas(List<AgendaVo> listaAgenda, AgendaVo agendaVo) throws ConexaoException, ListarObjetoException
			
	{
		AgendaController agendaController = null;
		AgendaClienteController agendaClienteController = null;
		AgendaClienteVo agendaClienteVo = null;
		AgendaClienteAtendimentoController agendaClienteAtendimentoController = null;
		AgendaClienteAtendimentoVo agendaClienteAtendimentoVo = null;
		int quantidade = 0, quantidadeNaoAtendido = 0, quantidadeAtendido = 0;
		try
		{
			if (listaAgenda != null && agendaVo != null)
			{
				synchronized (AgendaVo.class)
				{
					listaAgenda.clear();
					agendaController = new AgendaController(getConnection());
					agendaController.listarAgenda(listaAgenda, agendaVo);
					
					if (listaAgenda.size() > 0)
					{
						agendaClienteController = new AgendaClienteController(getConnection());
						agendaClienteAtendimentoController = new AgendaClienteAtendimentoController(getConnection());
						for (int i = 0; i < listaAgenda.size(); i++)
						{
							quantidade = 0;
							quantidadeAtendido = 0;
							quantidadeNaoAtendido = 0;
							agendaClienteVo = new AgendaClienteVo();
							agendaClienteVo.setAgendaVo(listaAgenda.get(i));
							agendaClienteController.listarAgendaCliente(listaAgenda.get(i).getListaAgendaClienteVo(), agendaClienteVo);
							
							for (int j = 0; j < listaAgenda.get(i).getListaAgendaClienteVo().size(); j++)
							{
								agendaClienteAtendimentoVo = new AgendaClienteAtendimentoVo();
								agendaClienteAtendimentoVo.getAgendaClienteVo().getClienteVo().setId(listaAgenda.get(i).getListaAgendaClienteVo().get(j).getClienteVo().getId());
								agendaClienteAtendimentoVo.getAgendaClienteVo().getAgendaVo().setDataAgenda(listaAgenda.get(i).getDataAgenda());
								agendaClienteAtendimentoController.listaAtendimentos(agendaClienteAtendimentoVo, listaAgenda.get(i).getListaAgendaClienteVo().get(j).getListaAtendimentos());
								
								if (listaAgenda.get(i).getListaAgendaClienteVo().get(j).getAgendaStatusVo().getId() == 3)
									listaAgenda.get(i).setQuantidadeClienteDiaAtendido(++quantidadeAtendido);
								else
									listaAgenda.get(i).setQuantidadeClienteDiaNaoAtendido(++quantidadeNaoAtendido);
								
								listaAgenda.get(i).setQuantidadeClienteDia(++quantidade);
							}
						}
					}
				}
			}
		}
		catch(ConexaoException e)
		{
			throw e;
		}
		catch (ListarObjetoException e)
		{
			throw e;
		}
		finally
		{
			agendaController = null;
			agendaClienteController = null;
			agendaClienteVo = null;
			agendaClienteAtendimentoController = null;
			agendaClienteAtendimentoVo = null;
		}
	}
	
	public void listarReagendamentoCliente(AgendaClienteVo agendaClienteVo, List<AgendaClienteReagendamentoVo> listaReagendamentos) throws ConexaoException, ListarObjetoException
	{
		AgendaClienteReagendamentoController agendaClienteReagendamentoController = null;
		AgendaClienteReagendamentoVo agendaClienteReagendamentoVo = null;
		try
		{
			if (agendaClienteVo != null && listaReagendamentos != null)
			{
				listaReagendamentos.clear();
				agendaClienteReagendamentoVo = new AgendaClienteReagendamentoVo();
				agendaClienteReagendamentoVo.getClienteVo().setId(agendaClienteVo.getClienteVo().getId());
				agendaClienteReagendamentoVo.setDataMovimento(agendaClienteVo.getAgendaVo().getDataAgenda());
				agendaClienteReagendamentoController = new AgendaClienteReagendamentoController(getConnection());
				
				agendaClienteReagendamentoController.carregarListaReagendamento(listaReagendamentos, agendaClienteReagendamentoVo);
			}
		}
		catch(ConexaoException e)
		{
			throw e;
		}
		catch (ListarObjetoException e)
		{
			throw e;
		}
		finally
		{
			agendaClienteReagendamentoController = null;
			agendaClienteReagendamentoVo = null;
		}
	}
}
